const { getList, getDetail, newBlog, updateBlog, delBlog } = require('../controller/blog') 
const {SuccessModel,  ErrorModel} = require('../model/resModel')

// 统一的登录验证函数
const loginCheck = (req) => {
  if(!req.session.username) {
    return Promise.resolve(new ErrorModel('尚未登录'))
  }
}

const handleBlogRouter = (req, res) => {
  const method = req.method 
  const id = req.query.id

  // 获取博客列表
  if(method === 'GET' && req.path === '/api/blog/list') {
    let author = req.query.author || ''
    const keyword = req.query.keyword || ''

    if(req.query.isadmin) {
      // 管理员界面
      const loginCheckResult = loginCheck(req)
      if(loginCheckResult) {
        // 未登录
        return loginCheckResult
      }
      // 强制查询自己的博客
      author = req.session.username
    }
   
    return getList(author, keyword).then(listData => {
      return new SuccessModel(listData)
    })
  }

  // 获取博客详情
  if(method === 'GET' && req.path === '/api/blog/detail') {
    const loginCheckResult = loginCheck(req)
    if(loginCheckResult) {
      // 未登录
      return loginCheckResult
    }
    return getDetail(id).then(data => {
      return new SuccessModel(data)
    })
  }

  // 新建博客
  if(method === 'POST' && req.path === '/api/blog/new') {
    const loginCheckResult = loginCheck(req)
    if(loginCheckResult) {
      // 未登录
      return loginCheckResult
    }
    const author = req.session.username
    req.body.author = author
    const blogData = req.body
    return newBlog(blogData).then(data => {
      return new SuccessModel(data)
    })
  }

  // 更新博客
  if(method === 'POST' && req.path === '/api/blog/update') {
    const loginCheckResult = loginCheck(req)
    if(loginCheckResult) {
      // 未登录
      return loginCheckResult
    }
    return updateBlog(id, req.body).then(val => {
      if(val) {
        return new SuccessModel()
      } else {
        return new ErrorModel('更新博客失败')
      }
    })
  }

  // 删除博客
  if(method === 'POST' && req.path === '/api/blog/del') {
    const loginCheckResult = loginCheck(req)
    if(loginCheckResult) {
      // 未登录
      return loginCheckResult
    }
    const author = req.session.username
    return delBlog(id, author).then(val => {
      if(val) {
        return new SuccessModel()
      } else {
        return new ErrorModel('删除博客失败')
      }
    })
    
  }
}

module.exports = handleBlogRouter